在寫 Vue.js 或 React 的過程,一定都會聽過這個名詞。
並不是所有的 component 都必須 pure ,不是這樣的,是有時候會需要 pure 有時候不需要,重點是開發者是不是可以掌握「我現在要不要 pure」而不是靠本能 pure。
在 pure function 這個專有名詞中,我們獲得兩個重點
也就是說,如果 component 也可以做到一樣的效果,不是 pure 至少也要「等效 pure」。
Vue.js 在 component 的語法中,我認為輸入可以指 props,輸出可以指 event。
從這個角度切入的話,要符合「輸出只和輸入有關」可以翻譯成「event 只和 prop 有關」(請畫重點。XDD)
而且在純 FP 的情況之下 ,是不會宣告變數的,所以盡可能的在 pure component 裡面,不要使用 data ,雖然大多數的情況之下,都是可以用 computed 來取代不被修改的 data,但還是有畫面邏輯需要的例外狀況。
重點:
就算你用 slot 這個定義依然沒有矛盾。因為 slot 的 props 會接到另一個 component 的 props。
一般來說,就是不使用 props ,但可以取得資料的做法。
基本的常見情況
有些較難判斷的
相信還有很多其它的狀況,像是使用 canvas 還是 maps 都是很難判斷的情況,所以一開始不要用這個來練習。
在 vue-cli 工具幫我們建置好的專案目錄中,有一個 views 和 component 兩個地方可以放 .vue
檔。初學的時候,只知道要放重複使用的 component,其實真正的意思是放「pure component」唯有 pure 才「好用 (方便重複使用)」,但也因為 pure 不適合由這個 component 決定資料是誰。
反而是由另一個目錄 views 的 .vue
檔來決定要載什麼資料,在 views 裡的 .vue
檔,引用 pure component 決定「要怎麼處理、呈現資料」,什麼 type 的資料,就選用相對應的 component 處理 (重要!要畫重點)。
其實就不 pure 而已,並不是一定要遵守這個原則,只是照著嚴格理論有它的優點,但並不是要記教條。沒有 pure 其實就沒有而已。哈哈~~ 維護上麻煩一點,寫的時候小心就可以了。
但是,要是有一絲絲的可能,可以完美的接近嚴格理論,我願意遵守。